home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / xes120.lha / XES / S / .edrc
Text File  |  1994-11-09  |  37KB  |  987 lines

  1. # The XDME Excelsior Suite Version 1.20 by Fergus Duniho
  2.  
  3. # give XDME more CPU-time
  4. taskpri 1
  5.  
  6. #RESERVED TOGGLES
  7. #DO NOT CHANGE THESE TWO TOGGLE VALUES
  8.  
  9. # Toggles 0 and 1 are set to 0 and 1, so that the
  10. # $(?var) type can be useful in control statements.
  11. resettoggle 0
  12. settoggle 1
  13.  
  14. # Toggle 2 is reserved for mouse movement.
  15. # Toggle 3 indicates equality
  16. # Toggle 4 indicates greater than or equal to
  17. # Toggle 5 indicates blocktype=line
  18. # Toggle 6 indicates blocktype=character
  19. # Toggle 7 indicates that a macro failed.
  20.  
  21. #Flags
  22. set smartkeys 1
  23.  
  24. #Global Variables
  25. set pparam ()
  26. set Dict `Work:Dict/Dictionary'
  27.  
  28. #Global defaults for variables that get set locally
  29. set mode (Fundamental)
  30. set fontname topaz.font
  31. set fontsize 8
  32. set cr return
  33. set ftab tab
  34. set btab backtab
  35. set rbrace x-]
  36. set password 0
  37. set method NONE
  38. # First Line Indent Column.  Useful in text mode and in reformatting.
  39. set indcol 0
  40.  
  41. #Settings
  42.  
  43. bgpen 0
  44. fgpen 2
  45. tbpen 3
  46. tfpen 1
  47. hgpen 7
  48. ignorecase on
  49. autoindent on
  50. autounblock on
  51. insertmode on
  52. savetabs off
  53. pageset 99
  54. nicepaging off
  55. blockendsfloat off
  56. setdeftitle (X:%c Y:%l %L %m %b %C %p %f %i)
  57.  
  58. rx AddLibraries
  59.  
  60. #Menus
  61.  
  62. setmacro m+ 2 (menuadd \$menu \$arg1 \$arg2)
  63. setmacro ms+ 2 (menusubadd \$menu \$submenu \$arg1 \$arg2)
  64. setmacro m- 0 (menubar \$menu)
  65. setmacro ms- 0 (menusubbar \$menu \$submenu)
  66. setmacro mc 3 (menucheck \$menu \$arg1 \$arg3 if (\$arg2) (menusetcheck \\\$menu \\\$arg1 1))
  67. setmacro msc 2 (menusetcheck \$menu \$arg1 \$arg2)
  68.  
  69. menuoff
  70. menuclear
  71.  
  72. set menu Project
  73. set submenu (About XES)
  74. ms+ (The XDME Excelsior Suite v1.20) null
  75. ms+ (Copyright © 1994 Fergus Duniho) null
  76. ms+ (Fidonet: The FileWorks BBS 1:2613/278) null
  77. ms+ (Internet: fdnh@troi.cc.rochester.edu) null
  78. ms-
  79. ms+ (If you use XES, please email me your) null
  80. ms+ (comments and suggestions.  That is) null
  81. ms+ (the only price for using XES!) null
  82.  
  83. m+ (About XDME) about
  84.  
  85. set submenu Load
  86. ms+ (Replace ... ^Ao) A-o
  87. ms+ (New     ... ^An) A-n
  88. ms+ (Insert  ...  F1) f1
  89. ms+ (Diary   ...  F2) f2
  90. ms+ (Decrypt ...  F3) f3
  91.  
  92. set submenu Save
  93. ms+ (Save    ... ^As) A-s
  94. ms+ (Save As ...  F9) f9
  95. ms+ (Block   ...  F8) f8
  96.  
  97. set submenu Print
  98. ms+ (Draft Print) (title (Hit RETURN to Print in Draft Mode, ESC to exit) escimm (writeto T:TEXT execute (Copy S:Draft PRT:) execute (Run <NIL: >NIL: Move T:TEXT PRT:)))
  99. ms+ (NLQ Print) (title (Hit RETURN to Print in NLQ Mode, ESC to exit) escimm (writeto T:TEXT execute (Copy S:NLQ PRT:) execute (Run <NIL: >NIL: Move T:TEXT PRT:)))
  100. ms+ (Print Preview) (writeto T:Text execute (sys:utilities/most T:Text))
  101.  
  102. m+ Compile (rx Compile)
  103.  
  104. set submenu Quit
  105. ms+ (Close Window c-q) c-q
  106. ms+ (Quit All     ^Aq) quitall
  107.  
  108. set menu Format
  109.  
  110. set submenu Reformat
  111. ms+ (Reformat ¶               a-f) a-f
  112. ms+ (Reformat Entire Document) (top while !b (xa-f first while !r downadd down))
  113. ms+ (Indent & Reformat Each ¶) (top a-0 while !b (firstnb split tab join reformat first while !r downadd down))
  114.  
  115. set submenu Paginate
  116. ms+ Paginate (writeto t:text execute (paginate <t:text >t:text2 \$pparam) top bstart bottom bend bdelete insfile t:text2)
  117. ms+ (Set Parameters) (title `Set Parameters for "Paginate"' escimm (settvar pparam `))
  118. ms+ (Show Parameters) (title `\$pparam')
  119.  
  120. set submenu Justify
  121. ms+ (Left Justify @ Column 1^A[) A-[
  122. ms+ (Left Justify @ Cursor^A@) A-@
  123. ms+ (Right Justify @ Margin^A]) A-]
  124. ms+ (Center^A=) A-=
  125. ms+ (Justify Full^Aj) A-j
  126. ms+ (Unjustify^AJ) A-J
  127. ms+ (Indent N Spaces^Ai) A-i
  128. ms+ (Align Line with Previous Line^A{) A-{
  129.  
  130. set submenu Spacing
  131. ms+ (Single Space  ^A1) A-1
  132. ms+ (Double Space  ^A2) A-2
  133.  
  134. set submenu Margins
  135. ms+ (Enter Indent Column ...) (reqnumber (\$fname) (Enter Indent Column) (OK|Cancel) \$indcol -1 \$margin settvar indcol \$reqresult)
  136. ms+ (Enter Left Margin ...  ) (reqnumber (\$fname) (Enter Left Margin) (OK|Cancel) \$parcol -1 \$margin setparcol \$reqresult)
  137. ms+ (Enter Right Margin ... ) (reqnumber (\$fname) (Enter Right Margin) (OK|Cancel) \$margin \$parcol 255 margin \$reqresult)
  138. ms+ (Margin Release      a-0) a-0
  139. ms+ (Set Indent Column   c-1) c-1
  140. ms+ (Set Left Margin     a-[) a-[
  141. ms+ (Set Right Margin    a-]) a-]
  142. ms+ (No Left Margin      a-=) a-=
  143.  
  144. set submenu Tabs
  145. ms+ (Set Tabstops) (set x (\$colno) dec x tabstop (\$x))
  146. ms+ (Enter Tabstops ...) (escimm (tabstop ))
  147.  
  148. set submenu Outline
  149. ms+ (Position Roman Heading) roman-indent
  150. ms+ (Position Non-Roman Heading) alphanum-indent
  151. #ms+ (Increment Heading ^Ank+) A-nk+
  152. #ms+ (Decrement Heading ^Ank-) A-nk-
  153. ms+ (Align Section w/ Above Section) (rx AlignHeading sa-[ ca-o)
  154. ms+ (Subordinate Section) (rx DownLevel sa-[ ca-o)
  155. ms+ (Reformat Entire Outline) (top while !b (format-outline first while !l downadd down))
  156. ms+ (Left Shift Outline Block) (goto block while cb (c-, first while !r down down))
  157. ms+ (Right Shift Outline Block) (goto block while cb (c-. first while !r down down))
  158. ms+ (Renumber Outline Block) (rx RenumberOutline title \$RS)
  159.  
  160. set menu Edit
  161. set submenu Blocking
  162. ms+ (Begin/End ^Ab) block
  163. ms+ (Unblock   ^Au) unblock
  164. ms+ (Push Block^A<) (push block)
  165. ms+ (Pop Block^A>) (pop block)
  166. ms+ (Region    a-b) block-region
  167. ms+ (All       ^Aa) $(A-a)
  168. ms+ (Paragraph) Mx-p
  169. ms+ (Section) Mx-b
  170.  
  171. set submenu (All Blocks)
  172. ms+ (Cut    ^Ax) A-x
  173. ms+ (Copy   ^Ac) A-c
  174. ms+ (Delete ^Ad) A-d
  175.  
  176. set submenu (Line Blocks)
  177. ms+ (Copy  ^Ak) bcopy
  178. ms+ (Move  ^Am) bmove
  179. ms+ (Sort) (bsave T:TEXT execute (C:Sort T:TEXT to T:TEXT) goto block bdelete insfile T:TEXT rx "Z=Delete('T:TEXT')")
  180.  
  181. set submenu (Vertical Blocks)
  182. ms+ (Open) (mark-block open-rectangle)
  183. ms+ (Clear) (mark-block clear-rectangle)
  184.  
  185. set submenu Regions
  186. ms+ (Mark   c-@) sc-2
  187. ms+ (Kill   c-w) c-w
  188. ms+ (Copy   a-w) a-w
  189. ms+ (Yank   c-y) c-y
  190. ms+ (Delete) delete-region
  191.  
  192. set submenu Rectangles
  193. ms+ (Copy) copy-rectangle
  194. ms+ (Kill) kill-rectangle
  195. ms+ (Delete) delete-rectangle
  196. ms+ (Open) open-rectangle
  197. ms+ (Clear) clear-rectangle
  198.  
  199. set submenu Insertion
  200. ms+ (Paste Clipboard ^Av) A-v
  201. ms+ (Yank Clipboard  c-y) c-y
  202. ms+ (Yank Rectangle) yank-rectangle
  203. ms+ (Literal ...     ^Al) A-l
  204. ms+ (ASCII ...      ac-a) ac-a
  205. ms+ (Signature) (insfile S:.signature)
  206.  
  207. set submenu Lines
  208. ms+ (Undo      ^Az) undo
  209. ms+ (Delete  a-nk.) a-nk.
  210. ms+ (Undelete  a-z) a-z
  211. ms+ (Insert  a-nk0) a-nk0
  212.  
  213. set submenu Case
  214. ms+ (UPPER CASE  a-u) a-u
  215. ms+ (lower case  a-l) a-l
  216. ms+ (Mixed Case  a-m) a-m
  217.  
  218. set menu Search
  219. mc (Ignore Case?) $ignorecase (ignorecase \$itemcheck)
  220. mc (Global Search?) $globalsearch (global \$itemcheck)
  221.  
  222. set submenu Find
  223. ms+ (Find ... ^Af) A-f
  224. ms+ (Next         a-n) a-n
  225. ms+ (Prev         a-p) a-p
  226. ms+ (Set Findstr  c-f) c-f
  227.  
  228. set submenu Replace
  229. ms+ (Replace ... ^Ar) A-r
  230. ms+ (Replace     a-r) a-r
  231. ms+ (Next) (nextr)
  232. ms+ (Prev) (prevr)
  233. ms+ (Set Repstr  c-r) c-r
  234.  
  235. set submenu Goto
  236. ms+ (Line ... ^Ag) A-g
  237. ms+ (Block Start) (goto start)
  238. ms+ (Block End) (goto end)
  239.  
  240. set menu Settings
  241. mc (Insert Mode?) $insertmode (insertmode \$itemcheck)
  242. mc (Read Only?) $viewmode (viewmode \$itemcheck)
  243. mc (Wordwrap?) $wordwrap (wordwrap \$itemcheck)
  244. mc (Autosplit?) $autosplit (autosplit \$itemcheck)
  245. mc (Autoindent?) $autoindent (autoindent \$itemcheck)
  246.  
  247. # Updates the local settings in the Settings menu
  248. setmacro update-settings 0 (set menu Settings msc (Insert Mode?) \$insertmode msc (Read Only?) \$viewmode msc (Wordwrap?) \$wordwrap msc (Autosplit?) \$autosplit msc (Autoindent?) \$autoindent)
  249.  
  250. # Update the settings in the Search menu
  251. setmacro update-search 0 (set menu Search msc (Ignore Case?) \$ignorecase msc (Global Search?) \$globalsearch)
  252.  
  253. setmacro updmenu 0 (update-settings update-search)
  254.  
  255. m-
  256.  
  257. mc (Savetabs?) $savetabs (savetabs \$itemcheck)
  258. mc (Smart Cursor?) $smartkeys (set smartkeys \$itemcheck ifelse \$smartkeys (title `Smart Cursor Keys Mode') (title `Dumb Cursor Keys Mode'))
  259.  
  260. m-
  261.  
  262. set submenu Blocktype
  263. ms+ (Line) (blocktype line)
  264. ms+ (Character) (blocktype character)
  265. ms+ (Vertical) (blocktype vertical)
  266.  
  267. set submenu (Num. Keypad)
  268. ms+ (Numeric) keypad-numbers
  269. ms+ (Movement) keypad-move
  270. ms+ (Spelling) keypad-spell
  271.  
  272. set submenu (Major Modes)
  273. ms+ (Fundamental) c-f1
  274. ms+ (Programming) programming-mode
  275. ms+ (ARexx) arexx-mode
  276. ms+ (ANSI C / C++) c-mode
  277. ms+ (K&R C) krc-mode
  278. ms+ (Text) text-mode
  279. ms+ (Manual) manual-mode
  280. ms+ (Outline) outline-mode
  281. ms+ (Proofs) proofs-mode
  282.  
  283. m+ (Font ... a-f4) a-f4
  284.  
  285. set menu ANSI
  286.  
  287. set submenu Style
  288. ms+ (Plain) ((^[[0m))
  289. ms+ (Bold) ((^[[1m))
  290. ms+ (Italics) ((^[[3m))
  291. ms+ (Underline) ((^[[4m))
  292. ms+ (Italicize Word) ((^[[3m) while c<>32 right (^[[0m))
  293.  
  294. set submenu Foreground
  295. ms+ (Color 0) ((^[[30m))
  296. ms+ (Color 1) ((^[[31m))
  297. ms+ (Color 2) ((^[[32m))
  298. ms+ (Color 3) ((^[[33m))
  299.  
  300. set submenu Background
  301. ms+ (Color 0) ((^[[40m))
  302. ms+ (Color 1) ((^[[41m))
  303. ms+ (Color 2) ((^[[42m))
  304. ms+ (Color 3) ((^[[43m))
  305.  
  306. set menu Misc
  307. set submenu XPK
  308. ms+ (Select Method) (rx "Z='settvar method' substr(GetFile(,,'LIBS:compressors',,'Select XPK Method'),21,4); Z")
  309. ms+ (Select Password) (reqstring (XPK Password Requester) (Please Enter Password) OK|Cancel () settvar password (\$reqresult))
  310.  
  311. set submenu Spelling
  312. ms+ (Check Spelling) spell-check
  313. ms+ (Select Dictionary ...) (reqfile (Select Dictionary) () \$Dict set Dict \$reqresult)
  314. ms+ (Peruse Dictionary) (execute (SYS:Utilities/more \$Dict))
  315.  
  316. set submenu Source
  317. ms+ (File) (reqfile (Source File ...) () (S:.edrc) source \$reqresult)
  318. ms+ (Block  c-s) c-s
  319.  
  320. set submenu Convert
  321. ms+ (NL -> NL/CR) (writeto t:text execute (addcr <t:text >t:text2) top block bottom block bdelete insfile t:text2)
  322. ms+ (NL/CR -> NL) (writeto t:text execute (remcr <t:text >t:text2) top block bottom block bdelete insfile t:text2)
  323. ms+ (// -> /* */) (autosplit off top repeat -1 (findr // /* last ` */'))
  324.  
  325. set submenu Info
  326. ms+ (General) (title ("\$filename" \$mode Mode xpk\$(method).library))
  327. ms+ (Display Time  c-2) c-2
  328. ms+ (Count Words  a-F3) a-f3
  329.  
  330. set menu Disk
  331. m+ (Delete Files     ...) (rx1 MultiFiles Delete)
  332. m+ (Copy Files       ...) (rx1 MultiFiles Copy)
  333. m+ (Move Files       ...) (rx1 MultiFiles Move)
  334. m+ (Print Files      ...) (rx1 MultiFiles Print)
  335. m+ (Rake Files       ...) (rx1 MultiFiles Rake)
  336. m+ (Unpack Files     ...) (rx1 MultiFiles Unpack)
  337. m+ (Extract Archives ...) (rx1 MultiFiles Unarchive)
  338. m+ (View Archives    ...) (rx1 MultiFiles ViewArc)
  339. m+ (Run Programs     ...) (rx1 MultiFiles Run)
  340. m+ (Call ARexx Macro ...) (rx "GetFile(,,'Rexx:',,'Call ARexx Macro',,'PATGAD',,,,'#?.rexx')")
  341. #m+ (Call ARexx Macro ...) (pattern #?.rexx reqfile (Call ARexx Macro) () (REXX:) rx \$reqresult)
  342.  
  343. unset menu
  344. unset submenu
  345. menuon
  346.  
  347. #XDME Macros by Fergus Duniho
  348. #This file contains macros and some keymappings.
  349. #The keymappings are ones I plan to convert to macros,
  350. #because there is no use in the user calling them directly.
  351.  
  352. # $arg1 = $arg2 - $arg3
  353. setmacro minus 3 (set \$arg1 \$arg2 sub \$arg1 \$arg3)
  354.  
  355. # $arg1 = $arg2 + $arg3
  356. setmacro plus 3 (set \$arg1 \$arg2 add \$arg1 \$arg3)
  357.  
  358. # Compares two integers.  Returns results through toggles 3 & 4:
  359. # If 3 then $arg1 == $arg2
  360. # If 4 then $arg1 >= $arg2
  361. # If !3 then $arg1 != $arg2
  362. # If !4 then $arg1 < $arg2
  363. setmacro intcmp 2 (smv s \$arg1 sub s \$arg2 get-sign \$s eval-sign)
  364. setmacro get-sign 1 (rx "z='set z' sign(\$arg1); z")
  365. setmacro eval-sign 0 (settoggle 3 settoggle 4 repeat (\$z) (ifelse 3 (resettoggle 3) (resettoggle 4 break)))
  366.  
  367. # Creates a string of n spaces called $spaces
  368. # usage: spaces n
  369. setmacro spaces 1 (set spaces () \$arg1 (set spaces (\\\$spaces )))
  370.  
  371. # Puts the n characters from the cursor in $string
  372. # usage: string n
  373. setmacro string 1 (push pos set string () \$arg1 (force t (scanf c) set string (\\\$string\\\$scanf) force s right if r break) pop pos)
  374.  
  375. # Deletes a string whose length matches the length of the argument.
  376. # Normally the argument will match the string to be deleted.
  377. # It stores the argument in $lastdel for easy retrieval.
  378. setmacro delstr 1 (push pos pushvar findstr pushvar repstr findstr (\$arg1) repstr () replace set lastdel (\$arg1) popvar findstr popvar repstr pop pos)
  379.  
  380. # Indicates which type a block is.
  381. # Toggle 5 is set if it is a line block.
  382. # Toggle 6 is set if it is a character block.
  383. # Otherwise it is a vertical block.
  384. # Vertical blocks one row in height are classified as character blocks.
  385. setmacro block-type? 0 (goto end right ifelse cb (settoggle 5 left) (resettoggle 5 up ifelse cb (settoggle 6 left down) (left ifelse cb (resettoggle 6) (settoggle 6))))
  386.  
  387. # These store and goto single coordinates.
  388. # For some reason macros like these are needed in some commands, because
  389. # putting something like "col \$x" in a command sometimes throws it off.
  390. setmacro setx 0 (set x \$colno)
  391. setmacro sety 0 (set y \$lineno)
  392. setmacro gox 0 (col \$x)
  393. setmacro goy 0 (goto \$y)
  394.  
  395. setmacro subx 0 (sub x \$colno)
  396. setmacro addx 0 (add x \$colno)
  397. setmacro suby 0 (sub y \$lineno)
  398. setmacro addy 0 (add y \$lineno)
  399.  
  400. setmacro gop 0 (col \$parcol)
  401. setmacro gom 0 (col \$margin)
  402. setmacro goi 0 (col \$indcol)
  403.  
  404. # This pops every value given to a variable in a stack, so that the
  405. # stack is left empty.  This is here because "purgevar" doesn't work.
  406. setmacro empty-stack 1 (unset \$arg1 force f (repeat -1 (force rt (popvar \$arg1) unset \$arg1)))
  407.  
  408. #Array Macros
  409.  
  410. # Stores a string into the nth member of an array
  411. # usage: set-array <arrayname> <n> <string>
  412. setmacro set-array 3 (set \$arg1\$arg2 (\$arg3))
  413.  
  414. # Copies the nth member of an array into a variable
  415. # usage: get-array <variable> <arrayname> <n>
  416. setmacro get-array 3 (force f (rx "z='set \$arg1 $' || '\$arg2\$arg3'; z"))
  417.  
  418. # This unsets every member of an array whose size is contained in
  419. # its 0th member.  The ARexx macro LoadArray creates them this way.
  420. setmacro free-array 1 (get-array sz \$arg1 0 set cnt 0 inc sz repeat \$sz (unset-member \$arg1 inc cnt))
  421.  
  422. # This unsets the nth member of an array.
  423. # usage: unset-array <arrayname> <n>
  424. setmacro unset-array 2 (unset \$arg1\$arg2)
  425.  
  426. # This serves as a bridge between free-array and unset-array.
  427. setmacro unset-member 1 (unset-array \$arg1 \$cnt)
  428.  
  429. #List Processing macros
  430. # These are like LISP commands with some limitations:
  431. # 1) Lists cannot be members of lists
  432. # 2) These commands convert everything to upper case
  433.  
  434. # Stores the car of a list into a variable
  435. # usage: car <list> <var>
  436. setmacro car 2 (rx1 "arg list;c='set \$arg2' word(list,1);c" (\$arg1))
  437.  
  438. # Stores the cdr of a list into a variable
  439. # usage: cdr <list> <var>
  440. setmacro cdr 2 (rx1 "arg list;c='set \$arg2 ('subword(list,2)')';c" (\$arg1))
  441.  
  442. #Spell-checking macros using arrays
  443.  
  444. # This spell-checks a file with AlphaSpell, and it puts the list of
  445. # unfound words into an array called $unfound.  $unfound0 contains the
  446. # size of the array.  If the $unfound array already exists, this macro
  447. # starts by clearing it.
  448. setmacro spell-check 0 (if \$(?unfound0) (free-array unfound) writeto t:temp title (Spell Checking ...) execute (AlphaSpell S <t:temp >t:list "\$(Dict)") rx2 LoadArray unfound t:list ifelse \$(?unfound1) (set ucnt 1 newf keypad-spell) all-found)
  449.  
  450. # This indicates that AlphaSpell didn't find any misspellings.
  451. # It's a separate macro only because spell-check was getting long.
  452. setmacro all-found 0 (title (Every word in \$fname was found in \$Dict.))
  453.  
  454. # This sets the find string to the current member of the $unfound
  455. # array, as specified by the $ucnt variable.  It shows $F in the titlebar.
  456. setmacro newf 0 (get-array W unfound \$ucnt findstr \$W top first title (\$W))
  457.  
  458. # These move forwards and backwards through the list of unfound words.
  459. # They never go out of bounds.
  460. setmacro next-uf 0 (inc ucnt intcmp \$unfound0 \$ucnt if !4 (set ucnt \$unfound0) newf)
  461. setmacro prev-uf 0 (dec ucnt intcmp 0 \$ucnt if 4 (set ucnt 1) newf)
  462.  
  463. #Keypad modes
  464.  
  465. setmacro keypad-numbers 0 (unmap nk1 unmap nk2 unmap nk3 unmap nk4 unmap nk5 unmap nk6 unmap nk7 unmap nk8 unmap nk9 unmap nk0 unmap nk. unmap nk+ unmap nk- unmap `nk(' unmap `nk)' unmap nk/ unmap nk*)
  466. setmacro keypad-move 0 `map nk1 a-down map nk2 -down map nk3 s-down map nk4 -left map nk5 c-l map nk6 -right map nk7 a-up map nk8 -up map nk9 s-up map `nk(' keypad-numbers'
  467. setmacro keypad-spell 0 (keypad-move map nk1 (set ucnt \$unfound0 newf) map nk7 (set ucnt 1 newf) map nk+ next-uf map nk- prev-uf map nk3 a-n map nk9 a-p)
  468.  
  469. setmacro goleft 0 (ifelse l (up last) left)
  470. setmacro goright 0 (ifelse r (down firstnb) right)
  471.  
  472. # This positions a line n columns from column 1.
  473. setmacro pos-line 1 (last ifelse l (col +\$arg1) (indent . -255 indent . (\$arg1) firstnb))
  474.  
  475. #Major Modes
  476.  
  477. setmacro fundamental-mode 0 (unsettvar mode unsettvar cr unsettvar ftab unsettvar btab unsettvar rbrace autosplit off wordwrap off setparcol -1 tabstop 4 blocktype line updmenu)
  478. setmacro programming-mode 0 (c-f1 settvar mode (Programming) settvar ftab prog-tab settvar btab prog-backtab updmenu)
  479. setmacro arexx-mode 0 (c-f1 settvar mode (ARexx) settvar ftab ARexx-indent settvar btab prog-backtab updmenu)
  480. setmacro c-mode 0 (c-f1 settvar mode (ANSI C) settvar ftab C_tab settvar rbrace C_brace map Mc-t AIC-indent updmenu)
  481. setmacro krc-mode 0 (c-f1 settvar mode (K&R C) settvar ftab C_tab settvar rbrace C_brace map Mc-t KRC-indent updmenu)
  482. setmacro outline-mode 0 (c-f1 settvar mode (Outline) settvar cr My-return settvar ftab alphanum-indent settvar btab roman-indent wordwrap on updmenu)
  483. setmacro text-mode 0 (c-f1 settvar mode (Text) settvar cr text-return settvar ftab text-format wordwrap on settvar indcol 8 setparcol 0 blocktype character updmenu)
  484. setmacro proofs-mode 0 (c-f1 settvar mode (Proofs) settvar cr M-return settvar ftab M-tab setfont clean 8 updmenu)
  485. setmacro manual-mode 0 (programming-mode settvar mode (Manual) wordwrap on updmenu)
  486.  
  487. #Programming Mode
  488. # This mode assigns the tab and backtab to macros that are generally
  489. # useful for indenting code in any language.  When a mode is available
  490. # for a specific language, it is better to use the more specific mode.
  491.  
  492. setmacro prog-tab 0 (ifelse cb (goto block while cb (prog-indent down) goto block firstnb) prog-indent)
  493. setmacro prog-indent 0 (sety repeat -1 (up firstnb if !r break) setx goy firstnb if x>=\$x (add x \$tabstop) dec x pos-line \$x)
  494. setmacro prog-backtab 0 (ifelse cb (indent b -.t) (indent . -t) firstnb)
  495.  
  496. #ARexx Mode
  497.  
  498. setmacro ARexx-indent 0 (up firstnb setx down firstnb ifelse c="end" (push pos match-end firstnb setx pop pos) (ifelse c="when" arexx-when (ifelse c="otherwise" arexx-when (arexx-indent? if 3 (add x \$tabstop)))) pos-line \$x)
  499.  
  500. setmacro arexx-indent? 0 (settoggle 3 if c<>"then" (resettoggle 3 arexx-do? if !3 arexx-select?))
  501. setmacro arexx-do? 0 (up sety firstnb while y=\$y (if c="do" (settoggle 3 break) wright) inc y goy)
  502. setmacro arexx-select? 0 (up sety firstnb while y=\$y (if c="select" (settoggle 3 break) wright) inc y goy)
  503. setmacro arexx-when 0 (pushvar findstr findstr select push pos prev firstnb setx add x \$tabstop pop pos pushvar findstr)
  504.  
  505. setmacro match-end 0 (smv yy \$lineno pushvar findstr prev2 do select set cnt 0 while y<\$yy (find end inc cnt) repeat \$cnt (prev2 do select))
  506.  
  507. setmacro prev2 2 (ping 9 prevf (\$arg1) ifelse 7 (prevf (\$arg2)) (sety setx pong 9 prevf (\$arg2) ifelse 7 (goy gox) (ifelse y<\$y (goy gox) (if y=\$y (if x<\$x gox)))))
  508.  
  509. # Prev with a failure flag.  Toggle 7 gets set if prev fails.
  510. # Unlike prev, this takes the findstr as an argument.
  511. setmacro prevf 1 (resettoggle 7 findstr (\$arg1) smv x \$colno smv y \$lineno force ft prev if y=\$y (if x=\$x (settoggle 7)))
  512.  
  513. setmacro pos 2 (col \$arg1 goto \$arg2)
  514.  
  515. # This replaces every occurrence of the findstr with the repstr
  516. # within any sort of block.
  517. setmacro replace-block 0 (goto start sety goto end right if cb last while y>=\$y (prev if cb replace) goto start)
  518.  
  519. # This replaces every occurrence of the findstr with the repstr
  520. # within a document.
  521. setmacro replace-all 0 (bottom last repeat -1 (prev push pos replace pop pos))
  522.  
  523. #C Mode
  524.  
  525. # This properly indents a single line of C code or all the lines of C
  526. # code in a block.
  527. setmacro C_tab 0 (ifelse cb (goto block while cb (Mc-t down) goto block) Mc-t)
  528.  
  529. # Properly positions a right brace when you type one.
  530. setmacro C_brace 0 ((}) ping 9 firstnb ifelse c="}" Mc-1 (pong 9))
  531.  
  532. # Properly indents a line for ANSI/ISO Standard C and for C++
  533. # Left braces always go at the ends of lines.
  534. setmacro AIC-indent 0 (indent . -255 first ifelse c="{" (up join) (Mc-g Mcs-2))
  535.  
  536. # Properly indents a line for the original Kernighan & Richie C
  537. # Left braces may go on their own lines.
  538. setmacro KRC-indent 0 (indent . -255 first ifelse c="{" (up firstnb set m (\$colno) down) Mc-g Mcs-2)
  539.  
  540. # This calculates which column a line should begin on.
  541. map Mc-g (set m 1 if c<>"#" (ifelse c="else" Mc-e (ifelse c="}" Mc-2 (Mc-f if 5 (ping 9 wleft ifelse c="else" Mcs-0 (last left ifelse c=41 Mcs-0 (ifelse c="," Mc-, Mc-;)))))))
  542.  
  543. # This sets the indentation mark one tab length forward.
  544. map Mcs-0 (firstnb tab set m (\$colno) pong 9)
  545.  
  546. map Mc-; (pong 9 insert (}) left force s match sc-l if c="{" (force s firstnb if c="switch" (force s tab) set m (\\\$colno) pong 9) del add m 4 last if !l (left if c=":" (sub m 4)) pong 9)
  547. map Mc-, (pong 9 insert (}) left force s match sc-l if c="{" (force s firstnb if c="switch" (force s tab) tab set m (\\\$colno) pong 9) del add m 4 last if !l (left if c=":" (sub m 4)) pong 9)
  548.  
  549. # If the line isn't blank, this checks whether a left brace reigns
  550. # over the current line.  Toggle 5 is reset if one doesn't, which
  551. # will usually be for comments in the preprocessor code.
  552. map Mc-f (settoggle 5 if !r (insert (}) left force s match ifelse c="{" (force s match) (resettoggle 5) del))
  553.  
  554. #map Mcs-2 (ifelse r (col (\$m)) (split col (\$m) join))
  555.  
  556. # This does the actual indenting after it is determined which column
  557. # a line should begin at.
  558. map Mcs-2 (ifelse r (col (\$m)) (indent . (\$m) indent . -1))
  559.  
  560. map Mc-1 (ping 9 force s match force s firstnb setx pong 9 del gox (}))
  561.  
  562. # This finds out how to indent a right brace by finding the line
  563. # with its matching left brace, which it aligns it with.
  564. map Mc-2 (ping 9 force s match force s firstnb set m (\$colno) pong 9)
  565.  
  566. # This checks whether the preceding line contains an "if", an "else",
  567. # an "else if", or a right brace.  It sets toggle 5 if it doesn't.
  568. # This is for using it in a while loop until it finds a line which
  569. # begins in one of these ways.
  570. map Mc-L (resettoggle 5 up firstnb if c<>"}" (if (c<>"else if") (if c<>"if" (ifelse c="else" backtab (settoggle 5)))))
  571.  
  572. # This searches for the line that will indicate how an "else" line should
  573. # be indented.  It will be aligned with it if it begins with an "if", an
  574. # "else if" or a right brace.  But if it's another "else" line, it will
  575. # be indented one tab length to its left.
  576. map Mc-e (ping 9 settoggle 5 while 5 Mc-L set m (\$colno) pong 9)
  577.  
  578. #Text Mode
  579.  
  580. setmacro text-format 0 (pos-line \$indcol first push pos downadd while !r (pos-line \$parcol downadd first) sety pop pos suby dec y gom repeat \$y (ifelse r join break) firstnb ifelse r (col +\$indcol) reformat)
  581.  
  582. setmacro text-return 0 (if !l (split down) insline down text-format)
  583.  
  584.  
  585. setmacro text_tab 0 (ifelse cb (indent b -255 indent b t goto start firstnb a-[ reformat) (indent . .t firstnb))
  586. setmacro text_backtab 0 (indent . -.t firstnb)
  587.  
  588. # Stores coordinates of point into $arg1 and $arg2
  589. setmacro mark-point 2 (settvar \$arg1 \$colno settvar \$arg2 \$lineno)
  590.  
  591. # Goto Mark
  592. setmacro goto-mark 0 (goto (\$my) col (\$mx))
  593.  
  594. # Block Region
  595. # Marks the the region as a block.
  596. setmacro block-region 0 (region-top bstart cx-x goleft bend goright)
  597. map a-b block-region
  598.  
  599. # Mark Block as Region
  600. # The point marks the top of the range.
  601. setmacro mark-block 0 (goto end right ifelse cb (first downadd sc-2 goto start first) (sc-2 goto start))
  602.  
  603. # Indicates whether Mark precedes Point
  604. # toggle 7 = 1 if Mark precedes Point
  605. # toggle 7 = 0 if Mark doesn't precede Point
  606. setmacro mark-first? 0 (resettoggle 7 ifelse y>\$my (settoggle 7) (if y=\$my (if x>\$mx (settoggle 7))))
  607.  
  608. # Goto Top of Region
  609. setmacro region-top 0 (mark-first? if 7 cx-x)
  610.  
  611. # Goto End of Region
  612. setmacro region-end 0 (mark-first? if !7 cx-x)
  613.  
  614. # Calculates distances between Mark and Point
  615. # $dy = abs((Mark row) - (Point row))
  616. # $dx = abs((Mark column) - (Point column))
  617. setmacro x-distance? 0 (minus dx \$colno \$mx if x<\$mx (neg dx))
  618. setmacro y-distance? 0 (minus dy \$lineno \$my if y<\$my (neg dy))
  619. map xy-d (x-distance? y-distance?)
  620.  
  621. # Delete Region
  622. setmacro delete-region 0 (region-top xy-d ifelse y=\$my (\$dx del) (cx-x split cx-x remeol down \$dy deline up last ifelse l deline join))
  623.  
  624. #Rectangles
  625. # Commands which operate on region-rectangles, ala Emacs
  626.  
  627. # Goto top left of region-rectangle, set mark at bottom right
  628. setmacro topleft-rectangle 0 (mark-point tx ty if x>\$mx (col \$mx settvar mx \$tx) if y>\$my (goto \$my settvar my \$ty))
  629.  
  630. # Marks region-rectangle as a vertical block
  631. setmacro block-rectangle 0 (topleft-rectangle blocktype vertical bstart cx-x left bend right)
  632.  
  633. # Calculates dimensions of Rectangle
  634. # Also creates a blank line equal to its width
  635. setmacro dimrec 0 (topleft-rectangle xy-d inc dy spaces \$dx)
  636.  
  637. # Deletes rectangle
  638. setmacro delete-rectangle 0 (dimrec pushvar findstr pushvar repstr push pos findstr \$spaces repstr () \$dy (replace down) popvar findstr popvar repstr pop pos)
  639.  
  640. # Pushes the contents of a rectangle to its right
  641. setmacro open-rectangle 0 (dimrec push pos \$dy (push pos insert (\$spaces) pop pos down) pop pos)
  642.  
  643. # Fills rectangle with spaces
  644. setmacro clear-rectangle 0 (dimrec push pos \$dy (push pos overwrite (\$spaces) pop pos down) pop pos)
  645.  
  646. # Copies rectangle to T:rectangle
  647. setmacro copy-rectangle 0 (block-rectangle cx-x rx2 copyrec \$colno \$mx unblock)
  648.  
  649. # Kills rectangle
  650. setmacro kill-rectangle 0 (copy-rectangle delete-rectangle)
  651.  
  652. # Yanks killed rectangle and marks it as a region-rectangle
  653. setmacro yank-rectangle 0 (push pos rx yankrec sc-2 pop pos)
  654.  
  655. # Replaces every occurrence of $findstr with $repstr within a region-rectangle
  656. setmacro replace-rectangle 0 (block-rectangle while y>=\$my (prev if cb replace) goto end sc-2 goto start)
  657.  
  658. # These update the Windows menu.
  659. # Each entry in the Windows menu is set to update the Settings menu.
  660. setmacro mw- 0 (menudel Window (\$fname))
  661. setmacro mw+ 0 (rx1 Mode (\$filename) updmenu menuadd Window (\$fname) (select (window=\$fname) updmenu))
  662.  
  663. #map A-p `push savetabs push modified savetabs off writeto prt: pop auto pop auto'
  664.  
  665. #Cursor Keys
  666.  
  667. map down (down if \$smartkeys (if r last))
  668. map left goleft
  669. map right goright
  670. map up (up if \$smartkeys (if r last))
  671.  
  672. map a-up (sc-2 first top)
  673. map a-down (sc-2 bottom last)
  674. map a-left  (firstnb)
  675. map a-right (last)
  676.  
  677. map c-up scrollup
  678. map c-down scrolldown
  679. map c-left scrollleft
  680. map c-right scrollright
  681.  
  682. map s-up (pageup)
  683. map s-down (pagedown)
  684. map s-left (wleft)
  685. map s-right (wright)
  686.  
  687. map c-f1 fundamental-mode
  688.  
  689. #Mode Specific Keys
  690.  
  691. map return (\$cr)
  692. map tab (\$ftab)
  693. map s-tab (\$btab)
  694. map s-] (\$rbrace)
  695.  
  696. map sx-] ((}))
  697.  
  698. #Tabs
  699.  
  700. map a-tab (ifelse cb (indent b .t) (indent . .t) firstnb)
  701. map sa-tab (ifelse cb (indent b -.t) (indent . -.t) firstnb)
  702.  
  703. map c-tab (repeat tr (( )))
  704. map sc-tab (repeat tl bs)
  705.  
  706. #Margins
  707.  
  708. map a-0 (setparcol 0 title `Left Margin set to 0')
  709.  
  710. map c-1 (settvar indcol \$colno title (Indent Column set to \$colno))
  711.  
  712. # a-[ sets the left margin to the column position.
  713. map a-[ (ifelse l a-0 sa-[)
  714. map sa-[ (left ifelse x<\$margin (setparcol \$colno title `Left Margin Set To \$colno') (title (Can't Set Left Margin To \$colno. The Right Margin is \$margin.)) right)
  715.  
  716. # a-] sets the right margin to the column position.
  717. map a-] (margin (\$colno) title `Right Margin set to \$colno')
  718.  
  719. # Releases the left margins
  720. map a-= (setparcol -1 settvar indcol 0 title `Left Margin set to -1, Indent Column set to 0')
  721.  
  722. #Justification
  723.  
  724. map A-[ (ifelse cb (goto end while cb (justify left up) goto start) (justify left))
  725. map A-] (ifelse cb (goto end while cb (justify right up) goto start) (justify right))
  726. map A-= (ifelse cb (goto end while cb (justify center up) goto start) (justify center))
  727. map A-@ (if !cb lineblock set m (\$colno) dec m indent b -255 indent b (\$m) unblock)
  728. map A-j (ifelse cb (goto end first while cb (justify full up if r (up up))) (justify full))
  729. map A-J (ifelse cb (goto end while cb (unjustify up) goto start) unjustify)
  730. map A-i (title (Enter the number of spaces to indent.) escimm (set m ) indent b (\$m) unblock)
  731. map A-{ (up firstnb set m (\$colno) dec m down indent . -255 indent . (\$m))
  732.  
  733. #Format
  734.  
  735.  
  736. map xa-f (down firstnb ifelse r (a-= up) (a-[ up join) reformat)
  737.  
  738. #Outline
  739.  
  740. setmacro setindcol 1 (settvar indcol \$arg1)
  741.  
  742. # Calculates the left margin ($parcol) from the outline level ($lv).
  743. setmacro calc-parcol 0 (smv m 3 add m \$lv mul m \$tabstop setparcol \$m)
  744.  
  745. setmacro roman-indent 0 (firstnb ifelse cl (set lv 3) (set lv 0) indent-outline)
  746. setmacro alphanum-indent 0 (firstnb ifelse cn (set lv 2) (ifelse cl (set lv 4) (set lv 1)) indent-outline)
  747. setmacro indent-outline 0 (setx while ca right subx if c=41 (add lv 3) calc-parcol add x \$parcol sub x \$tabstop setindcol \$x text-format gop right)
  748.  
  749. setmacro format-outline 0 (firstnb while ca right right ifelse r (tab a-[) (wright split last tab a-[ indent-body))
  750. setmacro indent-body 0 (push pos down first while !r (pos-line \$parcol downadd first) pop pos down reformat up last join wright indent . .ct wright)
  751.  
  752. map My-return (if !t (first while !r up down) firstnb setx first while !r downadd downadd if !r (insline insline) gox)
  753.  
  754. #Spacing
  755.  
  756. map x-1 (goto start first while cb (if r deline if !r downadd))
  757. map x-2 (x-1 goto start while cb (down if cb (insline down)))
  758. map A-1 (ifelse cb x-1 (Mx-p x-1 unblock pop block))
  759. map A-2 (ifelse cb x-2 (Mx-b x-2 unblock pop block))
  760. map xy-2 (goto start while cb (Mx-b x-2 down pop block))
  761. map xy-2 (top while !b (Mx-b x-2 down))
  762. map xy-1 (top while !b (Mx-p x-1 down))
  763. map A-! (x-1 goto start while cb (if !t (firstnb if !l (insline down)) downadd))
  764.  
  765. #Proofs
  766.  
  767. map M-tab (col 40 if !r (last col +5) insert (// ))
  768. map M-return (firstnb scanf %[0123456789] set ln (\$scanf) last split down first inc ln insert (\$ln.) up first wright if c="Show" (col +2) down)
  769. map a-| (goto block first find Show down while cb (overwrite (|) left down) unblock)
  770.  
  771. map `a-(' ``¬''
  772. map `a-)' ``º''
  773. map a-nk/ ``÷''
  774. map a-nk* ``ª''
  775.  
  776. #Deletion
  777.  
  778. map bs (ifelse l (up last ifelse l (join del) (join right)) bs)
  779. map del (ifelse r (if !b (last ifelse l (join del) join)) del)
  780.  
  781. # These delete parts of lines and store the result in $string and in $lastdel.
  782. map a-bs (ifelse l (up last join right) (setx dec x first string (\\\$x) delstr (\\\$string)))
  783. map a-del (ifelse r join (scanf l delstr (\\\$scanf)))
  784.  
  785. # The following three keymappings, a-d, s-del, and s-bs, delete words.
  786. # a-d works much like M-d in Emacs, and the other two delete entire
  787. # strings.  They each store the deleted string in $string.
  788.  
  789. # This deletes non-alphanumerics only at the beginning of a word.
  790. # It is otherwise similar to s-del, which deletes all characters.
  791. map a-d (while r (down firstnb) setx while !ca (right if c=32 break if r break) while ca right minus len \$colno \$x gox string \$len delstr (\$string))
  792.  
  793. # s-del deletes everything from the cursor to the start of the next word
  794. # or, for the last word in a line, to the end of the line.
  795. map s-del (setx sety wright if y>\$y (goy last) minus len \$colno \$x gox string \$len delstr (\$string))
  796.  
  797. # s-bs deletes everything from the end of the previous word to just before
  798. # the cursor.
  799. map s-bs (setx sety wleft if y<\$y (last setx wleft) minus len \$x \$colno string \$len delstr (\$string))
  800.  
  801. #Insertion
  802.  
  803. map s-nk0 (insert (\$lastdel))
  804. map (a- ) (firstnb insline)
  805. map (A- ) (firstnb inslines 3 down)
  806. map A-l (InsLit)
  807.  
  808. #Case
  809.  
  810. map xa-u (if cl (tlate -32))
  811. map a-u (ifelse cb (goto block firstnb while cb (xa-u goright)) (while c<>32 (xa-u right) wright))
  812. map xa-l (if cu (tlate +32))
  813. map a-l (ifelse cb (goto block firstnb while cb (xa-l goright)) (while c<>32 (xa-l right) wright))
  814. map xa-m (xa-u goright while c<>32 (xa-l goright) wright)
  815. map a-m (ifelse cb (goto block firstnb while cb xa-m) xa-m)
  816.  
  817. #Block
  818.  
  819. map A-a (bottom last block top first block)
  820. map A-k (blocktype line bcopy)
  821. map A-m (blocktype line bmove)
  822. map A-u (unblock)
  823. map As-, (push block)
  824. map As-. (pop block)
  825. map c-s (ifelse cb (blocktype line) lineblock bsource)
  826. map Mx-b (push block first while !r (if t break up) if r down bstart while !r (down if b break) if r up bend)
  827. map Mx-p (push block firstnb while l (up if t break firstnb) bstart down firstnb while l (down if b break firstnb) if !l up last while l (up last) bend)
  828.  
  829. #Line
  830.  
  831. map a-nk. (first deline)
  832. map a-nk0 (split down undeline up join join)
  833. map a-nk2 (deline downadd undeline)
  834. map a-nk4 (wleft a-t)
  835. map a-nk6 (a-t wright)
  836. map a-nk8 (deline up undeline)
  837. map a-z (undeline)
  838.  
  839. #File Requester
  840.  
  841. map f1 (arpinsfile)
  842. map f2 (rx Diary text-mode)
  843. map f3 (rx1 FileOp Decrypt)
  844. map f8 (barpsave)
  845. map f9 (rx1 FileOp Saveas)
  846. map A-o (rx1 FileOp Replace)
  847. map A-n (rx1 MultiFiles Load)
  848.  
  849. #Other File Operations
  850.  
  851. map c-f4 (mw- title `Change Filename' escimm (chfilename `\$filename) mw+)
  852. map c-q (rx Quit)
  853. map A-s (rx Save)
  854.  
  855. #Miscellaneous Requesters
  856.  
  857. map a-f4 (FontReq)
  858. map ac-a (rx "C='insert' d2c(rtgetlong(,'Enter ASCII value.','Insert ASCII Requester',,'rtgl_min=0 rtgl_max=255')); C")
  859. map A-g (rx "C='force r (goto' rtgetlong(,'Enter Line # ...','Goto Line Requester',,'rtgl_min=1')')'; C")
  860. #map A-g (push pos bottom sc-l pop pos reqnumber (Goto Line Requester) (Enter Line # ...) OK|Cancel () 1 \$L goto \$reqresult)
  861.  
  862. #Find & Replace
  863.  
  864. map a-a (ignorecase on)
  865. map a-A (ignorecase off)
  866. map A-f (rx ReqFind)
  867. map A-r (rx RepReq)
  868. map a-r (if c="\$findstr" replace)
  869.  
  870. map a-n next
  871. map a-p prev
  872. map c-r (scanf %s repstr (\$scanf))
  873. map c-f (ifelse y=\$my (x-distance? if x>\$mx cx-x string \$dx findstr (\$string)) (scanf %s findstr (\$scanf)))
  874.  
  875. #Ping Pong
  876.  
  877. map s-f1 (ping 1)
  878. map s-f2 (ping 2)
  879. map s-f3 (ping 3)
  880. map s-f4 (ping 4)
  881. map s-f5 (ping 5)
  882. map s-f6 (ping 6)
  883. map s-f7 (ping 7)
  884. map A-f1 (pong 1)
  885. map A-f2 (pong 2)
  886. map A-f3 (pong 3)
  887. map A-f4 (pong 4)
  888. map A-f5 (pong 5)
  889. map A-f6 (pong 6)
  890. map A-f7 (pong 7)
  891.  
  892. #Minor Modes
  893.  
  894. map A-w (wordwrap toggle)
  895.  
  896. #Miscellaneous
  897.  
  898. map c-2 (rx "C='('Date('W') Date() Time()')'; 'title' C")
  899. map help (newwindow newfile S:.edrc mw+ settvar method RAKE)
  900. map s-help (newwindow newfile S:startup-sequence mw+)
  901. map a-; (first while !r (firstnb split first join ( ::> ) downadd))
  902. map a-/ (first while !r (firstnb split first join ( // ) downadd))
  903. map a-. (first while !r (firstnb split first join ( **> ) downadd))
  904. map as-8 (insline first insert (/*) down while !r (firstnb split first join ( * ) reformat downadd) insline first insert ( */))
  905.  
  906. map a-f3 (writeto `T:TEXT' execute (wcnt <T:TEXT >ENV:titlebar) rx "z=delete('T:TEXT')" title (\$titlebar))
  907. map A-q quitall
  908.  
  909. #EMACS Keymappings
  910.  
  911. #map c-x (title `C-X ...' qualifier x)
  912. map cx-s A-s
  913. map cx-k c-q
  914. map cx-c QuitAll
  915. map cx-w f9
  916. map c-t (scanf c set c0 (\$scanf) goleft scanf c overwrite (\$c0) ifelse r (if !b (down first del)) (overwrite (\$scanf)))
  917. map c-l (sc-l ifelse c>24 top bottom goto \$L redisplay)
  918. map c-e last
  919. map c-a first
  920. map c-k a-del
  921. map xs-9 (recstart)
  922. map xs-0 (recend)
  923. map x-e (recplay)
  924.  
  925. #Region (Keymappings match Emacs where applicable)
  926.  
  927. # Set Mark
  928. # $mx and $my are the column and row of the mark respectively.
  929. # They are local variables, so that each window has its own mark.
  930. map sc-2 (mark-point mx my title (Mark Set))
  931. map (c- ) sc-2
  932.  
  933. # Swap Mark and Point
  934. map cx-x (mark-point tx ty goto-mark settvar mx \$tx settvar my \$ty)
  935. map c-x cx-x
  936.  
  937. # Copy Region to Clipboard
  938. map a-w (blocktype character block-region cx-x copy unblock)
  939.  
  940. # Kill Region and Copy to Clipboard
  941. map c-w (blocktype character block-region copy delete-region unblock sc-2)
  942.  
  943. # Yank from Clipboard and Mark yanked text as Region.
  944. # This also compensates for a bug (or feature) in "copy,"
  945. # which A-v doesn't compensate for: "Copy" inserts a
  946. # linefeed after the text it inserts into the clipboard.
  947. map c-y (sc-2 clipins -bs)
  948.  
  949. #Block Editing
  950.  
  951. # Copy Block
  952. # Copies line and character blocks to the clipboard.
  953. # Copies vertical blocks to T:rectangle.
  954. map A-c (ifelse cb (block-type? ifelse 5 copy (ifelse 6 copy (mark-block copy-rectangle))) (lineblock copy) unblock)
  955.  
  956. # Cut Block
  957. # Cuts line and character blocks to the clipboard
  958. # Cuts vertical blocks to T:rectangle
  959. map A-x (ifelse cb (block-type? ifelse 5 (copy bdelete) (ifelse 6 (copy mark-block delete-region) (mark-block kill-rectangle))) (lineblock copy bdelete))
  960.  
  961. # Delete Block
  962. # Deletes any sort of block
  963. # If the cursor is not in a block, it deletes the current line
  964. map A-d (ifelse cb (block-type? ifelse 5 bdelete (ifelse 6 (mark-block delete-region) (mark-block delete-rectangle))) deline)
  965.  
  966. # Paste contents of Clipboard
  967. map A-v clipins
  968.  
  969. #Mouse stuff
  970.  
  971. map L-lmb (tomouse settoggle 2)
  972. map L-mmove (if 2 (bstart resettoggle 2) tomouse bend)
  973. map L-lm2 (if cb unblock)
  974.  
  975. #Internal Hidden Functions
  976.  
  977. map sc-c (set C (\$colno))
  978. map sc-l (set L (\$lineno))
  979.  
  980. # Toggles two words.
  981. map a-t (pushvar findstr pushvar repstr scanf +b repstr (\$scanf) wright scanf +b findstr (\$scanf) replace repstr (\$scanf) scanf +b findstr (\$scanf) prevr popvar findstr popvar repstr)
  982.  
  983.  
  984. map ca-o (if !r (ping 0 firstnb wright split return while !r (firstnb split first join return) pong 0 down while !r (insline join down) pong 0 down reformat firstnb split first join pong 0 join))
  985.  
  986. mw+
  987.